CREATE PROCEDURE SP_CARGA_STAGING_DIM_CLIENTE(
	@DATA DATETIME
)
AS
BEGIN
	DECLARE @DATA_CARGA DATETIME,
			@CPF VARCHAR(12),
			@Sexo CHAR(1),
			@cdCliente INT,
			@Nome VARCHAR(80),
			@DataNascimento DATETIME,
			@EstadoCivil VARCHAR(30),
			@Telefone VARCHAR(13),
			@Email VARCHAR(100),
			@Rua VARCHAR(45),
			@Numero VARCHAR(10),
			@Bairro VARCHAR(45),
			@Cidade VARCHAR(45),
			@Estado VARCHAR(45),
			
			@IdCliente_df INT,
			@cdCliente_df INT,
			@Nome_df VARCHAR(80),
			@CPF_df VARCHAR(12),
			@Sexo_df CHAR(1),
			@DataNascimento_df DATETIME,
			@EstadoCivil_df VARCHAR(30),
			@Telefone_df VARCHAR(13),
			@Email_df VARCHAR(100),
			@Rua_df VARCHAR(45),
			@Numero_df VARCHAR(10),
			@Bairro_df VARCHAR(45),
			@Cidade_df VARCHAR(45),
			@Estado_df VARCHAR(45),
								
			@PROCESS INT
						
	DECLARE C_CLIENTE CURSOR FOR
		SELECT c.DataCarga, c.cdCliente, c.Nome, c.CPF, c.Sexo, c.DataNascimento, c.EstadoCivil, c.Telefone, c.Email, c.Rua, c.Numero, c.Bairro, c.Cidade, c.Estado
		FROM ClienteAux AS c
		WHERE c.DataCarga = @DATA
	OPEN C_CLIENTE
	FETCH NEXT FROM C_CLIENTE INTO @DATA_CARGA, @cdCliente, @Nome, @CPF, @sexo, @DataNascimento, @EstadoCivil, @Telefone, @Email, @Rua, @Numero, @Bairro, @Cidade, @Estado
	WHILE(@@FETCH_STATUS = 0)
	BEGIN
		SELECT @IdCliente_df = df.idCliente, @cdCliente_df = df.cdCliente, @Nome_df = df.Nome, @CPF_df = df.CPF,
			   @Sexo_df = df.Sexo, @DataNascimento_df = df.DataNascimento, @EstadoCivil_df = df.EstadoCivil, @Telefone_df = df.Telefone,
			   @Email_df = df.Email, @Rua_df = df.Rua, @Numero_df = df.Numero, @Bairro_df = df.Bairro, @Cidade_df = df.Cidade, 
			   @Estado_df = df.Estado
		FROM DimCliente AS df
		WHERE (df.cdCliente = @cdCliente)		
		SET @PROCESS = ISNULL(@IdCliente_df,0)
		IF (@PROCESS <> 0)
		BEGIN				
			UPDATE DimCliente
			SET NOME = @NOME, CPF = @CPF, Sexo = @Sexo,DataNascimento = @DataNascimento, EstadoCivil = @EstadoCivil, 
			Telefone = @Telefone, Email = @Email, Rua = @Rua, Numero = @Numero, Bairro = @Bairro, Cidade = @Cidade,
			Estado = @Estado  
			WHERE cdCliente = @cdCliente
		END	
		ELSE
		BEGIN
			IF ((NOT (@NOME IS NULL OR @CPF IS NULL)) AND 
			   (NOT (@Sexo IS NULL OR @DataNascimento IS NULL OR @EstadoCivil IS NULL OR 
			   @Telefone IS NULL OR @Email IS NULL OR @Rua IS NULL OR @Numero IS NULL OR @Bairro IS NULL OR 
			   @Cidade IS NULL OR @Estado IS NULL)))
			BEGIN
			INSERT INTO DimCliente (cdCliente, Nome, CPF, Sexo, DataNascimento, EstadoCivil, Telefone, Email, Rua, Numero, Bairro, Cidade, Estado)
				VALUES (@cdCliente, @Nome, @CPF, @Sexo, @DataNascimento, @EstadoCivil, @Telefone, @Email, @Rua, @Numero, @Bairro, @Cidade, @Estado);
			END
		END	
		FETCH NEXT FROM C_CLIENTE INTO @DATA_CARGA, @cdCliente, @Nome, @CPF, @sexo, @DataNascimento, @EstadoCivil, @Telefone, @Email, @Rua, @Numero, @Bairro, @Cidade, @Estado
	END
	CLOSE C_CLIENTE
	DEALLOCATE C_CLIENTE
END;
GO

SET DATEFORMAT DMY
EXEC SP_CARGA_STAGING_DIM_CLIENTE '16/07/2012'

SELECT * FROM DimCliente
